Curso II – SISSA

Markdown y Leaflet

Objetivo y contenido

Objetivo y contenido

Objetivo: crear informes en formatos PDF y HTML.

  • Introducción a R Markdown
  • Creación y compilación de informes con código en PDF
  • Introducción a Leaflet

Introducción a R Markdown

R Markdown

El paquete rmarkdown ayuda a crear documentos que combinan código, resultados renderizados y texto. Estos documentos pueden ayudar a:

  • Reproducir tu análisis e informes

  • Comunicar tus resultados de manera más efectiva

  • Hacer ciencia de datos de manera interactiva

R Markdown puede renderizar documentos en PDF, HTML, Word, presentaciones, entre otros. Puedes leer el libro R Markdown: The Definitive Guide (en inglés).

Instalación

Puedes instalar el paquete rmarkdown de la siguiente manera:

# Instalar desde CRAN
install.packages('rmarkdown')

# O si deseas probar la versión de desarrollo, instálala desde GitHub
install.packages('devtools')
devtools::install_github('rstudio/rmarkdown')

Instalación

En caso de que desees renderizar documentos en formato PDF, necesitarás instalar LaTeX. Para este propósito, se recomienda TinyTeX https://yihui.name/tinytex/.

install.packages('tinytex')
tinytex::install_tinytex()

Trabajar con R Markdown

Los scripts de R tienen la extensión de archivo .R, mientras que los documentos de R Markdown tienen la extensión .Rmd. Una vez que el paquete rmarkdown esté instalado, podrás abrir un nuevo archivo Rmd de la siguiente manera:

File -> New File -> R Markdown

Trabajar con R Markdown

Cuando crees el documento, verás algo como esto:

Trabajar con R Markdown

El primer segmento del documento indica su información (por ejemplo, el título, autor y fecha) y características (por ejemplo, el formato de salida).

---
title: "Test"
author: "Oscar M. Baez-Villanueva"
date: "4/27/2022"
output: pdf_document
---

Trabajar con R Markdown

Puedes renderizar el archivo haciendo clic en el botón Knit en la parte superior del área de script. Por favor, guarda tu archivo como Test.Rmd.

Trabajar con R Markdown

El resultado es:

Trabajar con R Markdown

Por favor, ten en cuenta que tienes texto y código integrados en el mismo documento. Para agregar texto, simplemente escríbelo. Para agregar código, debes incrustarlo dentro de un bloque de código, que comienza y termina con tres acentos graves ```.

r indica el nombre del lenguaje de programación. Este bloque de código puede tener varias opciones que se deben agregar entre el lenguaje de programación (r) y el corchete de cierre (}).

Opciones del bloque de código

Puedes insertar un nuevo bloque de código con el atajo de teclado Ctrl + Alt + I (OS X: Cmd + Option + I).

eval = FALSE evita que se ejecute el código. Solo se utilizará para fines de renderizado.

include = FALSE evita que el código y los resultados aparezcan en el archivo final. R Markdown aún ejecuta el código en el bloque y los resultados pueden ser utilizados por otros bloques.

echo = FALSE evita que el código, pero no los resultados, aparezcan en el archivo final. Esta es una forma útil de incrustar figuras.

Opciones del bloque de código

message = FALSE evita que los mensajes generados por el código aparezcan en el archivo final.

warning = FALSE evita que las advertencias generadas por el código aparezcan en el archivo final.

fig.align alinea la figura al ‘center’, ‘right’ o ‘left’.

fig.cap = “…” agrega un título a los resultados gráficos.

Formatos de salida

Hay varios formatos disponibles en rmarkdown:

  • pdf_document
  • html_document
  • beamer_presentation
  • github_document
  • ioslides_presentation
  • latex_document
  • pdf_document
  • powerpoint_presentation
  • slidy_presentation
  • word_document

Sintaxis

El texto en un documento de R Markdown se escribe en Markdown Pandoc.

itálicas: rodeadas de guiones bajos (_) o asteriscos (*); e.g.,o, itálicas. itálicas.

negrita: rodeadas de dos guiones bajos (__) o asteriscos (**); e.g., negrita.

subíndice: rodeado de virgulillas (~); e.g., palabrasubíndice.

superíndice: rodeado de acentos circunflejos (^); e.g., palabrasuperíndice.

código en línea: rodeado de acentos graves (`); e.g., code.

Para agregar bibliografía, visita la sección 2.8 de Authoring Books with R Markdown.

Creación y compilación de informes con código en PDF

Números aleatorios

Creemos un documento PDF simple como ejemplo y nombremoslo Random numbers.

---
title: "Random numbers"
author: "Oscar M. Baez-Villanueva"
date: "`r Sys.Date()`"
output: pdf_document
---

Luego, podemos agregar un bloque de código para especificar que todo el código debe ser visible.

 ```{r setup, include=FALSE}
      knitr::opts_chunk$set(echo = TRUE)
 ``` 

Números aleatorios

Podemos agregar un poco de texto:

Utilizaremos la función norm para generar una matriz de 60 valores aleatorios distribuidos normalmente con seis columnas:
```{r}
x <- matrix(rnorm(60), ncol = 6)
print(x)
```

Números aleatorios

Luego, un poco más de texto:

Podemos calcular el valor promedio de todos los valores:
```{r}
vals <- as.numeric(x)
m    <- mean(vals)
```

Números aleatorios

Además, podemos mostrar los valores almacenados en variables en el texto de la siguiente manera:

El valor promedio de estos números es: `r m`. Además, `r max(vals)` es el valor máximo y `r min(vals)` es el mínimo.

Finalmente, podemos utilizar la función boxplot para visualizar los datos:

```{r fig.align='center', fig.cap="Diagrama de caja de los números aleatorios"}
boxplot(x)
```

Rendered document

Leaflet

Leaflet

Leaflet es una biblioteca de JavaScript de código abierto ampliamente utilizada para mapas interactivos. El paquete leaflet te ayuda a integrar y controlar mapas Leaflet en R. Este paquete te permitirá renderizar datos espaciales y compartir los resultados de una manera muy interesante.

Por favor, instala el paquete leaflet.

install.packages("leaflet")

Ahora, cárgalo:

library(leaflet)

Leaflet

Creemos un widget de mapa básico:

m <- leaflet()
m <- setView(m, lng = -99.179, lat =  21.801, zoom = 5)
m <- addTiles(m)
m <- addMarkers(m, lng = -99.179, lat = 21.801, popup = "Un lugar para visitar!")
m

Además, podemos usar el operador pipe del paquete magrittr:

m <- leaflet() %>%
  setView(lng = -99.179, lat =  21.801, zoom = 5) %>%
  addTiles() %>%
  addMarkers(lng = -99.179, lat = 21.801, popup = "Un lugar para visitar!")
m

Leaflet

Leaflet

Existen varios temas de mapas agradables aquí.

m <- leaflet(width="100%") %>%
  setView(lng = -99.179, lat =  21.801, zoom = 5) %>%
  addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
  addMarkers(lng = -99.179, lat = 21.801, popup = "A place to visit!")
m

Agregando datos vectoriales

Podemos agregar polígonos a los gráficos. Leamos el archivo de forma de una cuenca en Chile y su red de ríos con el paquete sf .

catch  <- "C:/Data/Shapefile/Trancura_catchment.shp"
rivers <- "C:/Data/Shapefile/Trancura_rivers.shp"
catch  <- read_sf(catch)
rivers <- read_sf(rivers)

Grafiquemos los datos:

leaflet(width="100%") %>% 
 addTiles() %>% 
 addPolygons(data=catch, weight = 3, color = "blue")

Agregando datos vectoriales

Agregando datos vectoriales

leaflet(width="100%") %>% 
 addTiles() %>% 
 addPolygons(data=catch, weight = 3, color = "blue", popup = ~ NOMBRE, group = "Cuenca") %>%
 addPolygons(data=rivers, weight = 3, color = "cyan", group = "Rios") %>%
 addLayersControl(
   overlayGroups = c("Cuenca", "Rios"),
   options = layersControlOptions(collapsed = FALSE)
 )

Agregando datos raster

Usemos el paquete raster para importar las capas ráster, ya que leaflet todavía no es compatible con el paquete terra.

rfmep <- "../Data/L11_RMarkdown/Raster/RF-MEP_1990-2018_multiannual.tif"
mswep <- "../Data/L11_RMarkdown/Raster/MSWEPv2.8_1990-2018_multiannual.tif"
rfmep <- raster(rfmep)
mswep <- raster(mswep)

r <- stack(rfmep, mswep)

pal <- colorNumeric(c("#0C2C84", "#41B6C4", "#FFFFCC"), values(r),
  na.color = "transparent")

Agregando datos raster

Para agregar archivos ráster:

leaflet(width="100%") %>% 
 addTiles() %>% 
 addRasterImage(r[[1]], colors = pal, opacity = 0.8, group = "RF-MEP") %>%
 addRasterImage(r[[2]], colors = pal, opacity = 0.8, group = "MSWEPv2.8") %>%
 addPolygons(data=catch, weight = 3, color = "blue", popup = ~ NOMBRE, group = "Cuenca") %>%
 addPolygons(data=rivers, weight = 3, color = "cyan", group = "Rios") %>%
 addLegend(pal = pal, values = values(r), title = "P [mm]") %>%
 addLayersControl(
   baseGroups = c("RF-MEP", "MSWEPv2.8"),
   overlayGroups = c("Cuenca", "Rios"),
   options = layersControlOptions(collapsed = FALSE),
 )

¡Gracias por su atención!